/*******************************************************\
|* Author: Trevor Sundberg
\*******************************************************/

// Header protection
#pragma once
#ifndef SKUGO_MATH_HPP
#define SKUGO_MATH_HPP

namespace Skugo
{
  // Two dimensional vector
  struct Vector2
  {
    float x, y;
  };

  // Three dimensional vector
  struct Vector3
  {
    float x, y, z;
  };

  // Four dimensional vector
  struct Vector4
  {
    float x, y, z, w;
  };

  // The quaternion (used for rotations)
  struct Quaternion
  {
    float x, y, z, w;
  };

  // A 3x3 matrix
  struct Matrix3
  {
    float m00, m01, m02,
          m10, m11, m12,
          m20, m21, m22;
  };

  // A 4x4 matrix
  struct Matrix4
  {
    float m00, m01, m02, m03,
          m10, m11, m12, m13,
          m20, m21, m22, m23,
          m30, m31, m32, m33;
  };

  // Type defines (ease of use)
  typedef Vector2     Vec2;
  typedef Vector3     Vec3;
  typedef Vector4     Vec4;
  typedef Quaternion  Quat;
  typedef Matrix3     Mat3;
  typedef Matrix4     Mat4;

  // Parameter type defines (ease of use)
  typedef const Vec2& Vec2Param;
  typedef const Vec3& Vec3Param;
  typedef const Vec4& Vec4Param;
  typedef const Quat& QuatParam;
  typedef const Mat3& Mat3Param;
  typedef const Mat4& Mat4Param;
}

// End header protection
#endif
